package com.example.demo.common;
/* @Author      zouzh
 * @PackageName BlogSystem-sm
 * @Package     com.example.demo.common
 * @Date        2023/9/9 11:51
 */

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.sql.SQLOutput;
import java.util.UUID;

/**
 * 密码工具类
 */
public class PasswordUtils {
    /**
     * 加盐加密
     * @param password
     * @return
     */
    public static String encrypt(String password){
        // 1.盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 2.将盐值和密码进行 md5 得到最终密码
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes(StandardCharsets.UTF_8));
        // 3.将盐值和最终密码进行返回
        return salt+ "$" +finalPassword;
    }

    /**
     * 加盐验证
     * @param password 待验证密码
     * @param dbPassword  数据库中的密码 = 盐值+分隔符+最终密码
     * @return
     */
    public static boolean decrypt(String password, String dbPassword){
        if (!StringUtils.hasLength(password) || !StringUtils.hasLength(dbPassword)
                || dbPassword.length() != 65){
            return false;
        }
        // 1. 得到盐值
        String[] dbPasswordArray = dbPassword.split("\\$");
        if (dbPasswordArray.length != 2){
            return  false;
        }
        // 盐值
        String salt = dbPasswordArray[0];
        // 最终确认密码
        String dbFinalPassword = dbPasswordArray[1];
        // 加密待验证的密码
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes(StandardCharsets.UTF_8));
        // 对比
        if (finalPassword.equals(dbFinalPassword)){
            return true;
        }
        return false;
    }

//    public static void main(String[] args) {
//        System.out.println(encrypt("123"));
//        String dbPassword = "fb94aca7b770431f983e6aa473e0ef67$6fb0a047ccfdb336458da7aef85f0c30";
//
//        System.out.println("正确 ：" + decrypt("123",dbPassword));
//        System.out.println("error :" + decrypt("1234",dbPassword));
//    }
}
